home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_SMASH.ZIP / Sega Smash Pack.txt < prev    next >
Text File  |  1999-05-19  |  21KB  |  431 lines

  1.  
  2. Free Information Xchange presents:
  3.  
  4. Sega Smash Pack - CD crack by Static Vengeance - May 19th, 1999
  5.  
  6. REQUIREMENTS:
  7. Full game install
  8. W32Dasm & Hex editor
  9.  
  10.     This game let's you play 8 classic games from Sega (the genesis console game I think).  The
  11. games include: Altered Beast, Columns, Golden Axe, Outrun, Phantasy Star 2, Super Shinobi & VectorMan
  12. The games and graphics aren't that good but they have been done in a Windows 95/98 format so you can
  13. play them.  The game also has one other problem with it.  A problem we can FiX by removing a little
  14. program bug left in by the programers.  The bug I'm speaking of is the CD check that is made before
  15. you can play any of the games.  Sega should have spent more time on updating the graphics (256 colors,
  16. what a waste of todays video cards) at the very least.  Anyways let's crack this one for "practice"
  17. ok.  First thing you do is to install the game and try to run it without the CD in the drive.  Bingo
  18. up pops a little Windows dialog saying we need the CD in the drive.
  19.     Same old method as used so many times before.  Disassemble the smash.exe and go up to the menu bar
  20. and select refs.  Then select "String data references" from the drop down menu.  From there, grab the
  21. slider bar on the refs box and scroll down until you see "Please insert the Sega Smash Pack CD-ROM in your"
  22. text.  What, no text to double click on?  How can that be?, well here's a clue:
  23.  
  24. +++++++++++++++++ DIALOG INFORMATION ++++++++++++++++++
  25.  
  26. Number of Dialogs =    2 (decimal)
  27.  
  28. Name: DialogID_0065, # of Controls=003, Caption:"No DirectSound Hardware Driver.", ClassName:""
  29.      001 - ControlID:03E9, Control Class:"BUTTON" Control Text:"Disable Sound" 
  30.      002 - ControlID:03E8, Control Class:"BUTTON" Control Text:"Use Emulation" 
  31.      003 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Your Sound Hardware is not supported
  32.                                                                 by DirectSound." 
  33. Name: DialogID_0070, # of Controls=003, Caption:"CD-ROM Not Found.", ClassName:""
  34.      001 - ControlID:0001, Control Class:"BUTTON" Control Text:"OK" 
  35.      002 - ControlID:0002, Control Class:"BUTTON" Control Text:"Cancel" 
  36.      003 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Please insert the Sega Smash Pack
  37.                                                                 CD-ROM in your CD-ROM Drive." 
  38.  
  39.     Sega is using a dialog ID and controls to build the pop-up dialog box.  Which means we'll have
  40. to used the next best thing.  Do a text search for "getdrivetypea" which is a KERNEL32.DLL call that is
  41. commonly used in CD checks.  Doing so will lead you to this bit of code:
  42.  
  43. * Referenced by a CALL at Address:
  44. |:004047F3                                           <-- Called only once
  45. |
  46. :00401060 81EC04020000            sub esp, 00000204
  47. :00401066 53                      push ebx
  48. :00401067 55                      push ebp
  49.  
  50. * Reference To: KERNEL32.GetFileAttributesA, Ord:010Dh
  51.                                   |
  52. :00401068 8B2D40C04300            mov ebp, dword ptr [0043C040]
  53. :0040106E 56                      push esi
  54. :0040106F 57                      push edi
  55.  
  56. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  57. |:00401293(U)
  58. |
  59. :00401070 8D842494010000          lea eax, dword ptr [esp+00000194]
  60. :00401077 8D9C2494010000          lea ebx, dword ptr [esp+00000194]
  61. :0040107E 50                      push eax
  62. :0040107F 6880000000              push 00000080
  63.  
  64. * Reference To: KERNEL32.GetLogicalDriveStringsA, Ord:011Eh
  65.                                   |
  66. :00401084 FF153CC04300            Call dword ptr [0043C03C]
  67. :0040108A 85C0                    test eax, eax
  68. :0040108C 0F8448020000            je 004012DA              <-- Jump down to CD check failed & exit
  69. :00401092 6A01                    push 00000001
  70.  
  71. * Reference To: KERNEL32.SetErrorMode, Ord:0264h
  72.                                   |
  73. :00401094 FF152CC04300            Call dword ptr [0043C02C]
  74. :0040109A 8A842494010000          mov al, byte ptr [esp+00000194]
  75. :004010A1 84C0                    test al, al
  76. :004010A3 0F84C5010000            je 0040126E
  77.  
  78. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  79. |:00401268(C)
  80. |
  81. :004010A9 53                      push ebx
  82.  
  83. * Reference To: KERNEL32.GetDriveTypeA, Ord:0104h            <-- Text string we searched for
  84.                                   |
  85. :004010AA FF1520C04300            Call dword ptr [0043C020]
  86. :004010B0 83F805                  cmp eax, 00000005          <-- 05 is the value for CD-Rom drive
  87. :004010B3 0F859E010000            jne 00401257
  88. :004010B9 8BFB                    mov edi, ebx
  89. :004010BB 83C9FF                  or ecx, FFFFFFFF
  90. :004010BE 33C0                    xor eax, eax
  91. :004010C0 8D942490000000          lea edx, dword ptr [esp+00000090]
  92. :004010C7 F2                      repnz
  93. :004010C8 AE                      scasb
  94. :004010C9 F7D1                    not ecx
  95. :004010CB 2BF9                    sub edi, ecx
  96. :004010CD 8BC1                    mov eax, ecx
  97. :004010CF 8BF7                    mov esi, edi
  98. :004010D1 8BFA                    mov edi, edx
  99. :004010D3 8D942490000000          lea edx, dword ptr [esp+00000090]
  100. :004010DA C1E902                  shr ecx, 02
  101. :004010DD F3                      repz
  102. :004010DE A5                      movsd
  103. :004010DF 8BC8                    mov ecx, eax
  104. :004010E1 33C0                    xor eax, eax
  105. :004010E3 83E103                  and ecx, 00000003
  106. :004010E6 F3                      repz
  107. :004010E7 A4                      movsb
  108.  
  109. * Possible StringData Ref from Data Obj ->"autorun.inf"   <-- Look for this file in the root dir
  110.                                   |
  111. :004010E8 BF88D04700              mov edi, 0047D088
  112. :004010ED 83C9FF                  or ecx, FFFFFFFF
  113. :004010F0 F2                      repnz
  114. :004010F1 AE                      scasb
  115. :004010F2 F7D1                    not ecx
  116. :004010F4 2BF9                    sub edi, ecx
  117. :004010F6 8BF7                    mov esi, edi
  118. :004010F8 8BFA                    mov edi, edx
  119. :004010FA 8BD1                    mov edx, ecx
  120. :004010FC 83C9FF                  or ecx, FFFFFFFF
  121. :004010FF F2                      repnz
  122. :00401100 AE                      scasb
  123. :00401101 8BCA                    mov ecx, edx
  124. :00401103 4F                      dec edi
  125. :00401104 C1E902                  shr ecx, 02
  126. :00401107 F3                      repz
  127. :00401108 A5                      movsd
  128. :00401109 8BCA                    mov ecx, edx
  129. :0040110B 8D842490000000          lea eax, dword ptr [esp+00000090]
  130. :00401112 83E103                  and ecx, 00000003
  131. :00401115 50                      push eax
  132. :00401116 F3                      repz
  133. :00401117 A4                      movsb
  134. :00401118 FFD5                    call ebp
  135. :0040111A 83F8FF                  cmp eax, FFFFFFFF
  136. :0040111D 0F8434010000            je 00401257
  137. :00401123 8D8C2490000000          lea ecx, dword ptr [esp+00000090]
  138.  
  139. * Possible StringData Ref from Data Obj ->"rt"                      <-- "Read Text"
  140.                                   |
  141. :0040112A 6884D04700              push 0047D084
  142. :0040112F 51                      push ecx
  143. :00401130 E8CE5B0300              call 00436D03
  144. :00401135 8BF0                    mov esi, eax
  145. :00401137 8D542418                lea edx, dword ptr [esp+18]
  146. :0040113B 56                      push esi
  147. :0040113C 6A40                    push 00000040
  148. :0040113E 52                      push edx
  149. :0040113F E8485B0300              call 00436C8C
  150. :00401144 8D442424                lea eax, dword ptr [esp+24]
  151.  
  152. * Possible StringData Ref from Data Obj ->"[autorun]"              <-- Look for this text string
  153.                                   |
  154. :00401148 6878D04700              push 0047D078
  155. :0040114D 50                      push eax
  156. :0040114E E8AD5A0300              call 00436C00
  157. :00401153 83C41C                  add esp, 0000001C
  158. :00401156 85C0                    test eax, eax
  159. :00401158 56                      push esi
  160. :00401159 0F85F0000000            jne 0040124F
  161. :0040115F 8D4C2414                lea ecx, dword ptr [esp+14]
  162. :00401163 6A40                    push 00000040
  163. :00401165 51                      push ecx
  164. :00401166 E8215B0300              call 00436C8C
  165. :0040116B 8D54241C                lea edx, dword ptr [esp+1C]
  166.  
  167. * Possible StringData Ref from Data Obj ->"open=Smash.exe"         <-- Then find this text string
  168.                                   |
  169. :0040116F 6868D04700              push 0047D068
  170. :00401174 52                      push edx
  171. :00401175 E8865A0300              call 00436C00
  172. :0040117A 83C414                  add esp, 00000014
  173. :0040117D 85C0                    test eax, eax
  174. :0040117F 56                      push esi
  175. :00401180 0F85C9000000            jne 0040124F
  176. :00401186 E8135A0300              call 00436B9E
  177. :0040118B 8BFB                    mov edi, ebx
  178. :0040118D 83C9FF                  or ecx, FFFFFFFF
  179. :00401190 33C0                    xor eax, eax
  180. :00401192 83C404                  add esp, 00000004
  181. :00401195 F2                      repnz
  182. :00401196 AE                      scasb
  183. :00401197 F7D1                    not ecx
  184. :00401199 2BF9                    sub edi, ecx
  185. :0040119B 8D942490000000          lea edx, dword ptr [esp+00000090]
  186. :004011A2 8BC1                    mov eax, ecx
  187. :004011A4 8BF7                    mov esi, edi
  188. :004011A6 8BFA                    mov edi, edx
  189. :004011A8 8D942490000000          lea edx, dword ptr [esp+00000090]
  190. :004011AF C1E902                  shr ecx, 02
  191. :004011B2 F3                      repz
  192. :004011B3 A5                      movsd
  193. :004011B4 8BC8                    mov ecx, eax
  194. :004011B6 33C0                    xor eax, eax
  195. :004011B8 83E103                  and ecx, 00000003
  196. :004011BB F3                      repz
  197. :004011BC A4                      movsb
  198.  
  199. * Possible StringData Ref from Data Obj ->"Setup\Setup.ini"     <-- Next, look for this file
  200.                                   |
  201. :004011BD BF58D04700              mov edi, 0047D058
  202. :004011C2 83C9FF                  or ecx, FFFFFFFF
  203. :004011C5 F2                      repnz
  204. :004011C6 AE                      scasb
  205. :004011C7 F7D1                    not ecx
  206. :004011C9 2BF9                    sub edi, ecx
  207. :004011CB 8BF7                    mov esi, edi
  208. :004011CD 8BFA                    mov edi, edx
  209. :004011CF 8BD1                    mov edx, ecx
  210. :004011D1 83C9FF                  or ecx, FFFFFFFF
  211. :004011D4 F2                      repnz
  212. :004011D5 AE                      scasb
  213. :004011D6 8BCA                    mov ecx, edx
  214. :004011D8 4F                      dec edi
  215. :004011D9 C1E902                  shr ecx, 02
  216. :004011DC F3                      repz
  217. :004011DD A5                      movsd
  218. :004011DE 8BCA                    mov ecx, edx
  219. :004011E0 8D842490000000          lea eax, dword ptr [esp+00000090]
  220. :004011E7 83E103                  and ecx, 00000003
  221. :004011EA 50                      push eax
  222. :004011EB F3                      repz
  223. :004011EC A4                      movsb
  224. :004011ED FFD5                    call ebp
  225. :004011EF 83F8FF                  cmp eax, FFFFFFFF
  226. :004011F2 7463                    je 00401257
  227. :004011F4 8D8C2490000000          lea ecx, dword ptr [esp+00000090]
  228.  
  229. * Possible StringData Ref from Data Obj ->"rt"                       <-- Another Read Text command
  230.                                   |
  231. :004011FB 6884D04700              push 0047D084
  232. :00401200 51                      push ecx
  233. :00401201 E8FD5A0300              call 00436D03
  234. :00401206 8BF0                    mov esi, eax
  235. :00401208 8D542418                lea edx, dword ptr [esp+18]
  236. :0040120C 56                      push esi
  237. :0040120D 6A40                    push 00000040
  238. :0040120F 52                      push edx
  239. :00401210 E8775A0300              call 00436C8C
  240. :00401215 8D442424                lea eax, dword ptr [esp+24]
  241.  
  242. * Possible StringData Ref from Data Obj ->"[startup]"               <-- Look for this string of text
  243.                                   |
  244. :00401219 684CD04700              push 0047D04C
  245. :0040121E 50                      push eax
  246. :0040121F E8DC590300              call 00436C00
  247. :00401224 83C41C                  add esp, 0000001C
  248. :00401227 85C0                    test eax, eax
  249. :00401229 56                      push esi
  250. :0040122A 7523                    jne 0040124F
  251. :0040122C 8D4C2414                lea ecx, dword ptr [esp+14]
  252. :00401230 6A40                    push 00000040
  253. :00401232 51                      push ecx
  254. :00401233 E8545A0300              call 00436C8C
  255. :00401238 8D54241C                lea edx, dword ptr [esp+1C]
  256.  
  257. * Possible StringData Ref from Data Obj ->"appname=sega smash pack"   <-- Now find this string
  258.                                   |
  259. :0040123C 6830D04700              push 0047D030
  260. :00401241 52                      push edx
  261. :00401242 E8B9590300              call 00436C00
  262. :00401247 83C414                  add esp, 00000014
  263. :0040124A 85C0                    test eax, eax
  264. :0040124C 56                      push esi
  265. :0040124D 7449                    je 00401298          <-- Everything is good, CD check passed & exit
  266.  
  267. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  268. |:00401159(C), :00401180(C), :0040122A(C)
  269. |
  270. :0040124F E84A590300              call 00436B9E
  271. :00401254 83C404                  add esp, 00000004
  272.  
  273. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  274. |:004010B3(C), :0040111D(C), :004011F2(C)
  275. |
  276. :00401257 8A03                    mov al, byte ptr [ebx]
  277. :00401259 43                      inc ebx
  278. :0040125A 84C0                    test al, al
  279. :0040125C 7407                    je 00401265
  280.  
  281. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  282. |:00401263(C)
  283. |
  284. :0040125E 8A0B                    mov cl, byte ptr [ebx]
  285. :00401260 43                      inc ebx
  286. :00401261 84C9                    test cl, cl
  287. :00401263 75F9                    jne 0040125E
  288.  
  289. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  290. |:0040125C(C)
  291. |
  292. :00401265 803B00                  cmp byte ptr [ebx], 00
  293. :00401268 0F853BFEFFFF            jne 004010A9
  294.  
  295. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  296. |:004010A3(C)
  297. |
  298. :0040126E 6A00                    push 00000000
  299.  
  300. * Reference To: KERNEL32.SetErrorMode, Ord:0264h
  301.                                   |
  302. :00401270 FF152CC04300            Call dword ptr [0043C02C]
  303. :00401276 8B1584F05A00            mov edx, dword ptr [005AF084]
  304. :0040127C 6A00                    push 00000000
  305. :0040127E 6800104000              push 00401000
  306. :00401283 6A00                    push 00000000
  307.  
  308. * Possible Reference to Dialog: DialogID_0070              <-- Set info for CD request dialog box
  309.                                   |
  310. :00401285 6A70                    push 00000070
  311. :00401287 52                      push edx
  312.  
  313. * Reference To: USER32.DialogBoxParamA, Ord:0093h          <-- Do it the pop-up box & ask for the CD
  314.                                   |
  315. :00401288 FF15FCC04300            Call dword ptr [0043C0FC]
  316. :0040128E 83F801                  cmp eax, 00000001        <-- 01 means you hit cancel to abort the game
  317. :00401291 7447                    je 004012DA              <-- Take this to cancel and return as failed
  318. :00401293 E9D8FDFFFF              jmp 00401070             <-- Jump back up and retry
  319.  
  320. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  321. |:0040124D(C)
  322. |
  323. :00401298 E801590300              call 00436B9E
  324. :0040129D 8BFB                    mov edi, ebx
  325. :0040129F 83C9FF                  or ecx, FFFFFFFF
  326. :004012A2 33C0                    xor eax, eax
  327. :004012A4 83C404                  add esp, 00000004
  328. :004012A7 F2                      repnz
  329. :004012A8 AE                      scasb
  330. :004012A9 F7D1                    not ecx
  331. :004012AB 2BF9                    sub edi, ecx
  332. :004012AD 6A00                    push 00000000
  333. :004012AF 8BC1                    mov eax, ecx
  334. :004012B1 8BF7                    mov esi, edi
  335. :004012B3 BF90E64D00              mov edi, 004DE690
  336. :004012B8 C1E902                  shr ecx, 02
  337. :004012BB F3                      repz
  338. :004012BC A5                      movsd
  339. :004012BD 8BC8                    mov ecx, eax
  340. :004012BF 83E103                  and ecx, 00000003
  341. :004012C2 F3                      repz
  342. :004012C3 A4                      movsb
  343.  
  344. * Reference To: KERNEL32.SetErrorMode, Ord:0264h
  345.                                   |
  346. :004012C4 FF152CC04300            Call dword ptr [0043C02C]
  347. :004012CA 5F                      pop edi                   <-- Could redirect code here from 40108C
  348. :004012CB 5E                      pop esi
  349. :004012CC 5D                      pop ebp
  350. :004012CD B801000000              mov eax, 00000001
  351. :004012D2 5B                      pop ebx
  352. :004012D3 81C404020000            add esp, 00000204
  353. :004012D9 C3                      ret
  354.  
  355. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:  <-- failed check comes here
  356. |:0040108C(C), :00401291(C)
  357. |
  358. :004012DA 5F                      pop edi
  359. :004012DB 5E                      pop esi
  360. :004012DC 5D                      pop ebp
  361. :004012DD 33C0                    xor eax, eax           <-- A zero in eax means no CD found
  362. :004012DF 5B                      pop ebx
  363. :004012E0 81C404020000            add esp, 00000204
  364. :004012E6 C3                      ret
  365.  
  366.     That was the CD checking routine.  It simply checks for the autorun.inf file on the CD and then
  367. opens it and reads the text strings.  Then compares against what's on an original Smash Pack CD.  Then
  368. the code opens the setup.ini and reads some text strings and compares it as well.  If everything works
  369. out then the code comes down to 401298, does a few things and eventualy loads eax with 01 to signify that
  370. the CD rom was found.  If not, the code jumps down to 4012DA and load eax with a zero for a failed CD
  371. check.  A quick crack would be to use the je at 40108C and change it to a non-conditional jump down to
  372. 4012CA.  This redirect would send the code right down the section the sets up for a passed CD check and
  373. exit.  That way 95% of the CD check isn't run and the correct value would be returned in eax.  The actual
  374. edit for that would be:
  375.  
  376. Edit smash.exe at 4,236
  377. =============================
  378. Search for: 0F 84 48 02 00 00
  379. Change to : 90 E9 38 -- -- --
  380.  
  381.     However, I like to stick to my normal methods and kill the CD check from the caller.  So let's check
  382. the code that calls this routine to see what needs to be done to crack this game. The code surounding 004047F3:
  383.  
  384.   -- Program code --
  385. :004047DF 57                      push edi
  386.  
  387. * Reference To: USER32.CreateWindowExA, Ord:0059h
  388.                                   |
  389. :004047E0 FF1520C14300            Call dword ptr [0043C120]
  390. :004047E6 3BC7                    cmp eax, edi
  391. :004047E8 A388F05A00              mov dword ptr [005AF088], eax
  392. :004047ED 0F8491010000            je 00404984
  393. :004047F3 E868C8FFFF              call 00401060                  <-- Do the CD check
  394. :004047F8 85C0                    test eax, eax                  <-- Test eax for pass/fail
  395. :004047FA 0F8484010000            je 00404984                    <-- eax=zero means failed - do not take!
  396. :00404800 A188F05A00              mov eax, dword ptr [005AF088]  <-- Getting this far continues the game
  397. :00404805 6A05                    push 00000005
  398. :00404807 50                      push eax
  399.  
  400. * Reference To: USER32.ShowWindow, Ord:026Ah
  401.                                   |
  402. :00404808 FF152CC14300            Call dword ptr [0043C12C]
  403. :0040480E 8B0D88F05A00            mov ecx, dword ptr [005AF088]
  404. :00404814 51                      push ecx
  405.   -- The rest of the game code --
  406.  
  407.     That's it, all you need to do is stop the check from being made and make sure you don't take
  408. the je jump at 004047FA.  The easiest way I can think of to do that would be to change the call to the
  409. CD check to mov eax, 00000001.  That way the CD check is never run and eax is loaded with 01 which makes
  410. the je fail.  This of course allows the game to run even though the CD isn't in the CD Rom drive.  There
  411. you have it, cracked and fully palyable from your hard drive.
  412.  
  413. 1.  Do a full game install
  414. 2.  Make the following edit
  415.  
  416. Edit smash.exe at 18,419
  417. ==========================
  418. Search for: E8 68 C8 FF FF
  419. Change to : B8 01 00 00 00
  420.  
  421. 3.  Try to enjoy it
  422.  
  423.     Save yourself a few bucks and download Mame (or Mame32) and grab the ~1,300 ROM sets it runs.
  424. It'll look as good or better and run so many more games, plus it's free.  Just takes some time and
  425. effort to download all those roms.  -+- Don't ask where to get it, just go to:  www.arcadeathome.com
  426.  
  427.     Two ways to crack this one, either way you choose to do it, this one is done becuase we FiX'ed it!
  428.  
  429. Static Vengeance - FiX
  430.  
  431.